#include <stdio.h>
#include <string>
using namespace std;
long long A=1992919, B=18181971;
FILE *f;
int ts=1;
int next()
{
	A=(A*13166771+B)%1000000007;
	B=(B*67771+A)%1000000007;
	return A;
}
void createtest() { char s[20]; sprintf(s, "%03d", ts); ts++; f=fopen(s, "w"); }
void gen0()
{
	createtest();
	fprintf(f, "abacaba\n4\naba\naca\na\nb\n");
	createtest();
	fprintf(f, "a\n1\na\n");
	createtest();
	fprintf(f, "aa\n1\na\n");
	createtest();
	fprintf(f, "aa\n1\naa\n");
	createtest();
	fprintf(f, "ab\n2\na\nb\n");
	createtest();
	fprintf(f, "abcdef\n4\nbcde\nabc\nd\nef\n");
	createtest();
	fprintf(f, "abcdef\n5\nabcd\ne\nf\nabc\ndef\n");
}
char s[110];
void gen1(int l, int n, int k)
{
	createtest();
	int i, j, t;
	for(i=0; i<l; s[i]=next()%k+'a', i++); s[l]=0;
	fprintf(f, "%s\n%d\n", s, n);
	for(i=0; i<k; fprintf(f, "%c\n", i+'a'), i++);
	for(; i<n; s[t]=0, fprintf(f, "%s\n", s), i++)
		for(t=next()%l+1, j=0; j<t; s[j]=next()%k+'a', j++);
}
void gen2(int l, int n, int k, int t)
{
	createtest();
	int i, j;
	for(i=0; i<l; s[i]=next()%k+'a', i++); s[l]=0;
	fprintf(f, "%s\n%d\n", s, n);
	for(i=0; i<k; fprintf(f, "%c\n", i+'a'), i++);
	for(; i<n; s[t]=0, fprintf(f, "%s\n", s), i++)
		for(j=0; j<t; s[j]=next()%k+'a', j++);
}
void gen3(int l, int n, int k, int t)
{
	createtest();
	int i, j;
	for(i=0; i<l; s[i]=next()%k+'a', i++); s[l]=0;
	for(i=0; i<4; s[next()%l]=next()%k+'a'+k, i++);
	fprintf(f, "%s\n%d\n", s, n);
	for(i=0; i<2*k; fprintf(f, "%c\n", i+'a'), i++);
	for(; i<n; s[t]=0, fprintf(f, "%s\n", s), i++)
	{
		for(j=0; j<t; s[j]=next()%k+'a', j++);
		for(j=0; j<2; s[next()%t]=next()%k+'a'+k, j++);
	}
}
void gen4(int l, int n, int k, int t)
{
	createtest();
	string s, v[105];
	int i, j;
	for(i=0; i<n; i++)
		for(j=0; j<t; v[i]+=next()%k+'a', j++);
	for(; s.size()+t<=l; )
	{
		i=next()%(s.size()+1);
		j=next()%n;
		s=s.substr(0, i)+v[j]+s.substr(i);
	}
	for(fprintf(f, "%s\n%d\n", s.c_str(), n), i=0; i<n; fprintf(f, "%s\n", v[i].c_str()), i++);
}
void gen5(int l, int n, int k, int t)
{
	createtest();
	string s, v[105];
	int i, j;
	for(i=0; i<n; i++)
		for(j=next()%t; j>=0; v[i]+=next()%k+'a', j--);
	for(; s.size()<=l-10; )
	{
		j=next()%n;
		if(s.size()+v[j].size()<=l)
		{
			i=next()%(s.size()+1);
			s=s.substr(0, i)+v[j]+s.substr(i);
		}
	}
	for(fprintf(f, "%s\n%d\n", s.c_str(), n), i=0; i<n; fprintf(f, "%s\n", v[i].c_str()), i++);
}
void gen6(int n, int k)
{
	createtest();
	int i;
	string s;
	for(i=0; i<n; i++)
		if(i%k==k-1) s+='b';
		else s+='a';
	for(fprintf(f, "%s\n%d\n", s.c_str(), n), i=1; i<n; fprintf(f, "%s\n", s.substr(0, i).c_str()), i++);
	s[0]='c';
	fprintf(f, "%s\n", s.c_str());
}
int main()
{
	int i;
	gen0();
	for(i=0; i<10; i++)
		gen1(10, 20, i+1);
	gen1(100, 100, 1);
	gen1(100, 100, 2);
	gen1(100, 100, 3);
	gen1(100, 100, 4);
	gen1(100, 100, 8);
	gen1(100, 100, 15);
	gen1(100, 100, 26);
	gen2(100, 100, 1, 10);
	gen2(100, 100, 1, 20);
	gen2(100, 100, 1, 30);
	gen2(100, 100, 1, 50);
	gen2(100, 100, 1, 60);
	gen2(100, 100, 1, 70);
	gen2(100, 100, 1, 90);
	gen2(100, 100, 1, 100);
	gen2(100, 100, 2, 10);
	gen2(100, 100, 2, 20);
	gen2(100, 100, 2, 50);
	gen2(100, 100, 2, 100);
	gen2(100, 100, 7, 30);
	gen2(100, 100, 20, 10);
	gen3(100, 100, 1, 10);
	gen3(100, 100, 1, 20);
	gen3(100, 100, 1, 60);
	gen3(100, 100, 2, 25);
	gen3(100, 100, 2, 40);
	gen4(100, 100, 2, 5);
	gen4(100, 100, 2, 10);
	gen4(100, 100, 3, 10);
	gen5(100, 100, 2, 20);
	gen5(100, 100, 3, 15);
	gen5(100, 100, 5, 10);
	gen5(100, 100, 19, 6);
	gen6(100, 1);
	gen6(100, 2);
	gen6(100, 10);
	return 0;
}